﻿using System;
using System.Collections.Generic;
using System.Linq;
using PortalCurriculo.Domain.Interface;

namespace PortalCurriculo.Domain
{
    public partial class Publicidade : IPublicidade
    {
        const string QuantidadePublicidadeLadoDireito = "QuantidadePublicidadeLadoDireito";

        #region Publicidade Members

        public List<Publicidade> Divulgar(Publicidade publicidade)
        {
            int quantidadePublicidade = int.Parse(new Configuracao { Descricao = QuantidadePublicidadeLadoDireito }.CarregarConfiguracao());

            List<Publicidade> publicidades = (from publicidadeModel in Context.Instance.Publicidades
                                              join contratoModel in Context.Instance.Contratoes
                                                  on publicidadeModel.Contrato equals contratoModel
                                              join tipoContratoModel in Context.Instance.TipoContratoes
                                                  on contratoModel.TipoContrato equals tipoContratoModel
                                              join localBannerModel in Context.Instance.LocalBanners
                                                  on publicidadeModel.LocalBanner equals localBannerModel
                                              where contratoModel.DataPublicacaoInicio <= DateTime.Now
                                                    && contratoModel.DataPublicacaoTermino >= DateTime.Now
                                                    && tipoContratoModel.Id == publicidade.Contrato.TipoContrato.Id
                                                    && localBannerModel.CodigoInterno == publicidade.LocalBanner.CodigoInterno
                                                    && publicidadeModel.Pago
                                                    && publicidadeModel.Ativo == true
                                              orderby publicidadeModel.UltimaVisualizacao,
                                                        publicidadeModel.NivelVisibilidade descending,
                                                        contratoModel.DataPublicacaoInicio descending
                                              select publicidadeModel).Take(quantidadePublicidade).ToList();

            foreach (Publicidade publicidadeAtualizar in publicidades)
            {
                publicidadeAtualizar.UltimaVisualizacao = DateTime.Now;
                publicidadeAtualizar.Save();
            }

            new EstatisticaPublicidade().AtualizarEstatisticasVisualizacao(publicidades);
            new EstatisticaLocalBanner().AtualizarEstatisticasVisualizacao(publicidade.LocalBanner);

            return publicidades;
        }

        #endregion
    }
}
